package com.ydl.shopping.utils;

import com.github.pagehelper.PageInfo;
import com.ydl.shopping.core.entity.PageResult;

import java.util.Collections;
import java.util.List;

public class PageUtil {
    public static PageResult getPageResult(PageInfo<?> pageInfo) {
        PageResult pageResult = new PageResult();
        // 分页数据
        pageResult.setRecords(pageInfo.getList());
        // 当前页数
        pageResult.setSize(pageInfo.getPageSize());
        // 数据总数
        pageResult.setTotal(pageInfo.getTotal());
        // 当前页码
        pageResult.setCurrent(pageInfo.getPageNum());

        return pageResult;
    }

    /**
     * 自定义数据分页
     *
     * @param pageNumber 页码
     * @param pageSize 页数
     * @param allData 分页数据
     * @return 分页结果
     * @param <T> 数据类型
     */
    public static <T> PageResult myStartPage(Integer pageNumber, Integer pageSize, List<T> allData) {
        PageResult pageResult = new PageResult();
        List<T> records;
        long total = 0;

        if (allData == null || allData.isEmpty()) {
            records = Collections.emptyList();
        } else {
            Integer number = pageNumber;
            Integer size = pageSize;
            total = allData.size();

            if (pageNumber == null || pageNumber <= 0) {
                pageNumber = 1;
                number = pageNumber;
            }

            if (pageSize == null || pageSize <= 0 || size > allData.size()) {
                pageSize = allData.size();
                size = allData.size();
            }

            if (number == 1) {
                // 含头不含尾
                records = allData.subList(0, size);
            } else {
                // 获取每页开始值 页码 * 页数 获取开始截取值
                int eachNumber = (number - 1) * size;
                // 获取当前页数量 每页开始值 + 页数 获取结束截取值
                int eachSize = eachNumber + size;
                if (eachNumber > allData.size()) { // 开始截取值大于总数量
                    records = Collections.emptyList();
                } else if (allData.size() <= eachSize) { // 总数 小于等于 结束截取值
                    eachSize = allData.size();
                    // 含头不含尾
                    records = allData.subList(eachNumber, eachSize);
                }else {
                    // 含头不含尾
                    records = allData.subList(eachNumber, eachSize);
                }
            }
        }

        // 分页数据
        pageResult.setRecords(records);
        // 当前页数
        pageResult.setSize(pageSize == null ? -1 : pageSize);
        // 数据总数
        pageResult.setTotal(total);
        // 当前页码
        pageResult.setCurrent(pageNumber);

        return pageResult;
    }
}
